package com.wmh.baseservice.admin.service;

import com.wmh.baseservice.admin.entity.AdMenu;
import com.wmh.baseservice.admin.pojo.vo.menu.AddV2ReqVo;
import com.wmh.baseservice.admin.pojo.vo.menu.MenuTreeVo;
import com.wmh.baseservice.admin.pojo.vo.menu.UpdateV2ReqVO;
import com.wmh.baseservice.admin.tools.enums.AdMenuFlag;
import com.wmh.baseservice.common.mybatisplus.methods.CommonService;

import java.util.List;
import java.util.Map;

/**
 * @author mmx generator
 * @since 2021-02-03
 */
public interface AdMenuService extends CommonService<AdMenu> {


    /**
     * 添加菜单 v2 版本接口
     * @param reqVo 请求体
     */
    void addV2(AddV2ReqVo reqVo);


    /**
     * 删除菜单 V2 版本接口
     * @param id 主键
     */
    void deleteV2(Long id);

    /**
     * 更新菜单 V2 版本接口
     * @param reqVO
     */
    void updateV2(UpdateV2ReqVO reqVO);


    /**
     * 获取角色菜单
     * @param roleIds 角色ids
     * @param flag 标记 1 菜单权限 2 操作权限
     * @return 用户权限列表
     * */
    List<AdMenu> getListByRoleIds(Integer flag,Long... roleIds);

    /**
     * 获取角色 "分类(按类型分类)" 好的菜单
     * @param  roleId 角色id
     * @return key : 菜单类型  value : 该类型的菜单列表
     * */
    Map<Integer,List<AdMenu>> getMenuMapping(Long roleId);

    /**
     * 获取子菜单
     * @param parentId 父级Id
     * @return 子菜单列表
     */
    List<AdMenu> subList(Long parentId);

    /**
     * 获取树级列表
     * @return 树级列表
     * */
    List<MenuTreeVo> treeList();

    /**
     * 在缓存中获取菜单
     * @param adId 管理员编号
     * @param flag 菜单类型 null 为获取全部
     * @return 菜单列表
     */
    List<AdMenu> getAdMenuByCache(Long adId, AdMenuFlag flag);
}